<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax文件下载测试</title>
</head>

<body>
    <script>
        /**
         * 获取 blob
         * @param  {String} url 目标文件地址
         * @return {cb} 
         */
        function getBlob(url, cb) {
            var xhr = new XMLHttpRequest();
           xhr.open('GET', url, true);
           
           //验证头
           xhr.setRequestHeader('Authorization','Bearer G_mphYg9od3xOfgQKl0')
            
            xhr.responseType = 'blob';
            xhr.onload = function () {
                if (xhr.status === 200) {
                    cb(xhr.response);
                }
            };
            xhr.send();
        }

        /**
         * 保存
         * @param  {Blob} blob     
         * @param  {String} filename 想要保存的文件名称
         */
        function saveAs(blob, filename) {
            if (window.navigator.msSaveOrOpenBlob) {
                navigator.msSaveBlob(blob, filename);
            } else {
                var link = document.createElement('a');
                var body = document.querySelector('body');

                link.href = window.URL.createObjectURL(blob);
                link.download = filename;

                // fix Firefox
                link.style.display = 'none';
                body.appendChild(link);

                link.click();
                body.removeChild(link);

                window.URL.revokeObjectURL(link.href);
            };
        }

        /**
         * 下载
         * @param  {String} url 目标文件地址
         * @param  {String} filename 想要保存的文件名称
         */
        function download(url, filename) {
            getBlob(url, function (blob) {
                saveAs(blob, filename);
            });
        };
        function test(){
            
            download('demo.com/api/1','test.xlsx');
            
        }

    </script>
    <button onclick="test()">下载</button>
</body>

</html>